package be.khleuven.kevinvranken.entiteiten;

import be.khleuven.kevinvranken.SpelPaneel;
import be.khleuven.kevinvranken.Sprite;
import be.khleuven.kevinvranken.SpriteStore;
import java.awt.Graphics;
import java.awt.Rectangle;

/**
 *
 * @author kevin
 * Waarden die elk wezen op het scherm dienen te bevatten
 */
public abstract class Personage extends Entiteit {

    private Sprite sprite; //Het te tekenen object
    private double dx; //Huidige horizontale snelheid (pixels/sec)
    private double dy; //Huidige verticale snelheid (pixels/sec)
    private double vorigeY,  vorigeX;

    /**
     * Een nieuw personage aanmaken op basis van de naam en de locatie.
     *
     * @param referentie De referentie naar de afbeelding die we willen tekenen
     * @param x de beginpositie op de X-as
     * @param y de beginpositie op de Y-as
     */
    public Personage(SpelPaneel spelPaneel, String referentie, int x, int y) {
        super(spelPaneel, x, y);
        setSprite(referentie);
    }

    /**
     * Iets een bepaalde tijd laten bewegen.
     *
     * @param delta De gepasseerde tijd in milliseconden
     */
    public void beweeg(long delta) {
        vorigeX = x;
        vorigeY = y;
        // de locatie updaten in functie van beweegsnelheden (dx,dy)
        x += (delta * dx) / 1000;
        y += (delta * dy) / 1000;
    }

    public void setHorizontaleSnelheid(double dx) {
        this.dx = dx;
    }

    public void setVerticaleSnelheid(double dy) {
        this.dy = dy;
    }

    public double getHorizontaleSnelheid() {
        return dx;
    }

    public double getVerticaleSnelheid() {
        return dy;
    }

    public void teken(Graphics g) {
        sprite.teken(g, (int) x, (int) y);
    }

    /**
     * Do the logic associated with this entity. This method
     * will be called periodically based on game events
     */
    public void doLogic() {
    }

    /**
     * @param sprite the sprite to set
     */
    public void setSprite(String referentie) {
        this.sprite = SpriteStore.get().getSprite(referentie);
        getCollisionRechthoek().setBounds((int) x, (int) y, sprite.getWidth(), sprite.getHeight());
    }
}
